package com.atguigu.gmall.realtime.app.func;

import com.atguigu.gmall.realtime.utils.KeywordUtil;
import org.apache.flink.table.annotation.DataTypeHint;
import org.apache.flink.table.annotation.FunctionHint;
import org.apache.flink.table.functions.TableFunction;
import org.apache.flink.types.Row;

/**
 * @author Felix
 * @date 2023/7/12
 * 自定义UDTF函数，实现分词
 *      继承TableFunction，标记当前类是自定义函数类
 *      在类中必须定义名字为eval的方法，注意：这个方法不是对父类方法的重写，因为在父类中明确不了自定义函数的参数
 *      在sql中调用函数的时候，底层会调用类中的eval方法，eval可以重载，会根据sql中函数的参数决定调用哪个eval
 */
@FunctionHint(output = @DataTypeHint("ROW<word STRING>"))
public class KeywordUDTF extends TableFunction<Row> {

    public void eval(String text) {
        for (String keyword : KeywordUtil.analyze(text)) {
            collect(Row.of(keyword));
        }
    }
}
